// axios配置文件

import axios from 'axios';
// element ui弹窗
import { Notification } from 'element-ui';
// router实例对象
import router from '@/router';

// baseURL：自动补全URL域名(网站购买新域名后，仅替换该处即可)
// 开发环境
axios.defaults.baseURL = process.env.VUE_APP_SERVER;

// 添加请求拦截器：携带token
axios.interceptors.request.use(function (config) {
	// console.log(config);
	// 提取access_token；装载token
	let access_token = sessionStorage.access_token;
	// 设置headers
	config.headers.Authorization = `Bearer ${access_token}`;
	// 在发送请求之前做些什么
	return config;
}, function (error) {
	// 对请求错误做些什么
	return Promise.reject(error);
});

// 添加响应拦截器(进入浏览器之前提前处理)：返回必要的数据
axios.interceptors.response.use(function (response) {
	// 2xx 范围内的状态码都会触发该函数。
	// 对响应数据做点什么
	// 只取data部分
	return response.data;
}, function (error) {
	// 超出 2xx 范围的状态码都会触发该函数。
	// console.log(error);
	// 状态码
	let { status } = error.response;
	// 当前请求的API接口地址
	let { url } = error.config;

	switch (status) {
		case 401:
			let { message } = error.response.data.inner;
			// 消息弹窗
			Notification.error({
				title: `错误：${status} -- ${message}`,
				message: 'access_token失效，请重新登录！',
			});
			// 获取目标地址
			console.log(router);
			let { fullPath } = router.history.current;
			// 重定向(注意与路由的重定向写法不同)
			router.replace({
				path: '/login',
				// 此处的fullPath改为url也可以
				query: { redirect: fullPath },
			});
			break;
		case 403:
			// 消息弹窗
			Notification.error({
				title: `错误：${status}`,
				message: `访问API接口：${url}，未授权！`,
			});
			break;
		case 404:
			Notification.error({
				title: `错误：${status}`,
				message: `接口地址错误，当前API接口：${url}！`,
			});
			break;
		case 500:
			Notification.error({
				title: `错误：${status}`,
				message: `API接口：${url}，请联系后端工程师！`,
			});
			break;
		default:
			Notification.error({
				title: `错误：${status}`,
				message: `API接口：${url}，请查看AJAX发送记录！`,
			});
			break;
	}
});
